FlexGrid for WPF 帮助文档
分组数据(使用ICollectionView)

ICollectionView接口包含对分组的支持,这将允许您创建分层的数据视图。例如,在上面的示例中,如果要对客户按照不同的国家和城市进行分组,您只需要简单地将生成Grid数据的部分修改为以下:

C#
拷贝代码
List<Customer> list = GetCustomerList();
PagedCollectionView view = new PagedCollectionView(list);
using (view.DeferRefresh())
{
  view.GroupDescriptions.Clear();
  view.GroupDescriptions.Add(new PropertyGroupDescription("Country"));
  view.GroupDescriptions.Add(new PropertyGroupDescription("Active"));
}
_flexGrid.ItemsSource = view;

表达式 using(view.DeferRefresh()) 为可选。它通过挂起来自于数据源的通知直至全部的分组设置完毕,以提高性能。

下图显示执行的结果:

数据项按照不同的国家以及其活动的区域进行分组。用户可以单击分组Header上的图标以折叠或者展开分组,就像他们在操作一个TreeView控件一样。

如果您希望在Grid层面禁用分组,请设置Grid的GroupRowPosition属性的值为GroupRowPosition.None(其他可用的选项为AboveData以及BelowData)。

由ICollectionView类提供的分组机制简单但功能强大。每一个级别的分组由PropertyGroupDescription对象定义。该对象允许您选择用于进行分组的属性,以及一个ValueConverter用来决定如何在分组时使用这个属性。

例如,如果我们想按国家的首字母来分组,则可以简单地修改代码如下:

C#
拷贝代码
List<Customer> list = GetCustomerList();
PagedCollectionView view = new PagedCollectionView(list);
using (view.DeferRefresh())
{
  view.GroupDescriptions.Clear();
  view.GroupDescriptions.Add(new PropertyGroupDescription("Country"));
  view.GroupDescriptions.Add(new PropertyGroupDescription("Active"));
  var gd = view.GroupDescriptions[0] as PropertyGroupDescription;
  gd.Converter = new CountryInitialConverter();
}
_flexGrid.ItemsSource = view;

CountryInitialConverter类实现了IValueConverter接口。它返回国家名称的第一个英文字母,使用该字母进行分组而不再是使用完整的国家名称。

C#
拷贝代码
// 按照首字母对国家进行分组的转换器
class CountryInitialConverter : IValueConverter
{
  public object Convert(object value, Type targetType,
    object parameter,
    System.Globalization.CultureInfo culture)
  {
    return ((string)value)[0].ToString().ToUpper();
  }
  public object ConvertBack(object value, Type targetType,
    object parameter,
    System.Globalization.CultureInfo culture)
  {
    throw new NotImplementedException();
  }
}

在完成这个小小的变化之后,客户将按照所在国家的第一个字母而不再是按照国家名称进行分组:

注意,该分组行将显示该分组的信息(依照分组的属性以及其值,以及其中包含的项目个数)。

为定制此信息,可以创建一个新的IValueConverter 类并将其指定给Grid的GroupHeaderConverter 属性。

例如,默认的分组Header转换器(显示如图片所示信息的那个默认转换器)的实现如下所示:

C#
拷贝代码
// 用作格式化显示分组标题的类
public class GroupHeaderConverter : IValueConverter
{
  public object Convert(object value,
    Type targetType, object parameter,
    System.Globalization.CultureInfo culture)
  {
    var gr = parameter as GroupRow;
    var group = gr.Group;
    if (group != null && gr != null && targetType == typeof(string))
    {
      var desc = gr.Grid.View.GroupDescriptions[gr.Level] as
                 PropertyGroupDescription;
      return desc != null
        ? string.Format("{0}: {1} ({2:n0} items)",
                 desc.PropertyName, group.Name, group.ItemCount)
        : string.Format("{0} ({1:n0} items)",
                 group.Name, group.ItemCount);
    }
    return value;
  }
  public object ConvertBack(object value, Type targetType,
    object parameter,
    System.Globalization.CultureInfo culture)
  {
    return value;
  }
}
查看其它

 

 


产品网站:http://www.gcpowertools.com.cn  |  咨询热线:4006576008   |   ©2015 西安葡萄城